package com.etc.dao;

import com.etc.dto.ReGoods;
import com.etc.entity.Attribute;
import com.etc.entity.AttributeValue;
import com.etc.entity.CategoryListing;
import com.etc.entity.GoodsSku;
import com.etc.entity.PageImg;
import com.etc.vo.AddAttrVo;
import com.etc.vo.ListingData;
import com.etc.vo.ListingImgVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface IListingP {
    /**
     * 根据父级ID查类目
     * @param pid 父级ID
     * @return 子类目
     */
    List<CategoryListing> testQuery(Integer pid);

    /**
     * 查询所有类目
     * @return 层叠级类目
     */
    List<CategoryListing> queryAll();

    /**
     * 根据类型查询所有属性
     * @param cid 类型ID
     * @return 属性组
     */
    List<Attribute> queryAttrByType(Integer cid);

    /**
     * 根据属性ID查属性值
     * @param attrId 属性ID
     * @return 属性值组
     */
    List<AttributeValue> queryAttrValueByType(int attrId);

    /**
     * 查询父级类目
     * @param cid 当前类目ID
     * @return 父级类目
     */
    CategoryListing queryParent(int cid);

    /**
     * 添加图片
     * @param pageImgs 图片组
     */
    boolean addPageImg(List<ListingImgVo> pageImgs);

    /**
     * 添加商品
     * @param goods 商品数据
     */
    int addGoods(ListingData goods);

    /**
     * 添加商品SKU
     * @param goodsSkus Sku组
     */
    boolean addSku(List<GoodsSku> goodsSkus);

    /**
     * 根据商品编号查询商品图
     * @param goodsId 商品编号
     * @return 所有商品相关图片
     */
    List<PageImg> queryImgByGoodsId(int goodsId);

    /**
     * 添加单一图片
     * @param imgVo 图片Vo
     * @return 返回主键给传入图片Vo
     */
    int addOneImg(ListingImgVo imgVo);

    /**
     * 删除图片
     * @param imgId 图片编号
     */
    boolean delOneImg(int imgId);

    /**
     * 删除商品Sku
     * @param skuId SkuId
     */
    boolean delSKU(int skuId);

    /**
     * 查询商品Sku
     * @param goodsId
     * @param properties
     * @return
     */
    List<GoodsSku> querySku(@Param("goodsId") int goodsId, @Param("properties") String properties);

    /**
     * 修改Sku信息
     * @param sku
     * @return
     */
    boolean modifySku(GoodsSku sku);

    /**
     * 查看图片路径
     * @param imgId
     * @return
     */
    String queryImgUrl(int imgId);

    /**
     * 查找商品
     * @param goodsId
     * @return
     */
    ReGoods queryGoods(int goodsId);

    /**
     * 更改商品属性
     * @param data
     * @return
     */
    boolean modifyGoods(ListingData data);

    boolean modifySkuNameOnGoodsName(@Param("oldName") String oldName,@Param("newName") String newName,@Param("goodsId")int goodsId);

    boolean addAttrName(AddAttrVo addAttrVo);

    boolean addAttrVal(@Param("attrName") int AttrName,@Param("attrVal") String val);

    Integer queryAttrByTypeAndAttrName(AddAttrVo attrVo);
}
